import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    lists: [],
    undoneLists: [],
    doneLists: []
  },
  mutations: {
    setList(state, lists) {
      state.lists = lists
    },
    setUndoneLists(state, lists) {
      state.undoneLists = lists
    },
    setDoneLists(state, lists) {
      state.doneLists = lists
    },
    changeDone(state, i) {
      var ret = state.lists.find((list, index) => {
        return index === i
      })
      ret.done = !ret.done
    }
  },
  actions: {
    // 从 数据库中 获取 数据
    getList(context) {
      // 写入文件速度 没有 代码执行到这行速度 快 设定计时器
      setTimeout(() => {
        axios.get('http://localhost:3000/todolists').then(list => {
          context.commit('setList', list.data)
        })
      }, 500)
    },
    // 新增 任务 到数据库
    addTodo(context, todo) {
      axios.post('http://localhost:3000/add', {
        params: {
          text: todo,
          done: false
        }
      })
    },
    // 删除 一条任务 更新到 数据库
    delTodo(context, i) {
      // 通过 index 获取 对应的 todo 的 _id值
      var { _id: delIndex } = context.state.lists.find((list, index) => {
        return index === i
      })

      axios.delete('http://localhost:3000/del', {
        params: {
          _id: delIndex
        }
      })
    },
    // 清除 已完成的任务 更新到 数据库
    clearDone(context) {
      axios.delete('http://localhost:3000/clearDone')
    },
    // 更新 数据库 的数据
    refreshLists(context) {
      var done = context.state.lists.filter(item => item.done === true)
      // console.log(...done)
      axios.post('http://localhost:3000/refresh', { params: { ...done } })
    },
    showUndone(context) {
      setTimeout(() => {
        axios
          .get('http://localhost:3000/undone', { params: { done: false } })
          .then(res => {
            context.commit('setUndoneLists', res.data)
          })
      }, 500)
    },
    showDone(context) {
      setTimeout(() => {
        axios
          .get('http://localhost:3000/done', {
            params: { done: true }
          })
          .then(res => {
            context.commit('setDoneLists', res.data)
          })
      }, 500)
    }
  }
})
